//
//  TFGuideHandler.h
//  TimeFaceDemoProject
//
//  Created by TFAppleWork-Summer on 2017/2/20.
//  Copyright © 2017年 Summer. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "TFGuideView.h"

@class TFGuideHandler;

/**
 引导页处理工具类代理
 */
@protocol TFGuideHandlerDelegate <NSObject>

@required;

/**
 添加引导页每一页对应的子view

 @param handler 引导页处理
 @param guideView 引导页
 @param page 页数
 @warning guideView的子view包括透明和添加的图片
 */
- (void)guideHandler:(nonnull TFGuideHandler *)handler addGuideViewSubViews:(nonnull TFGuideView *)guideView withPage:(NSInteger)page;

@optional;
/**
 根据guideModel返回对应的GuideView，此代理中需要配合guideSuperViewForGuideModel代理方法指定父view，若不实现此代理，则会默认生成和屏幕一样大小的GuideView.
 
 @param handler 引导页处理者
 @param guideModel 引导页数据模型
 @return TFGuideView
 */
- (nonnull TFGuideView *)guideHandler:(nonnull TFGuideHandler *)handler guideViewForGuideModel:(nonnull TFGuideModel *)guideModel;

/**
 根据guideModel返回对应的GuideView的父view，若不实现该代理则默认为当前window
 
 @param handler 引导页处理者
 @param guideModel 引导页数据模型
 @return UIView
 */
- (nonnull  UIView *)guideHandler:(nonnull TFGuideHandler *)handler guideSuperViewForGuideModel:(nonnull TFGuideModel *)guideModel;

/**
 guideView是否显示下一页，若不实现则默认YES.

 @param handler 引导页处理者
 @param guideView 引导页view
 @param index 点击的子view的位置索引，若为-1则点击的子view之外的区域
 @return BOOL
 */
- (BOOL)guideHandler:(nonnull TFGuideHandler *)handler guideViewShouldShowNextPage:(nonnull TFGuideView *)guideView withDidClickSubViewAtIndex:(NSInteger)index;

@end

/**
 引导页处理工具类
 */
@interface TFGuideHandler : NSObject

/**
 保存初始的引导页信息,NSDictionary为TFGuideModel类的字典类型(identifier,version,pageSize必须，currentPage，isEnd已默认)
 
 @param array 信息数组
 */
+ (void)saveOriginalGuideInfosWithArray:(nonnull NSArray<NSDictionary *> *)array;

/**
 根据引导页唯一标识符检测引导页，若需要显示则会显示下一页

 @param guideIdentifier 引导页唯一标识符
 @param delegate 代理者
 */
+ (void)checkGuideWithGuideIdentifier:(nonnull NSString *)guideIdentifier delegate:(nullable id<TFGuideHandlerDelegate>)delegate;

/**
 显示下一页
 */
- (void)showNextPage;

/**
 停止引导
 
 @warning 再次开始时从下一页开始
 */
- (void)stopGuide;

@end
